﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;

namespace LOGIC
{
    public class LogicConference
    {
       
        private DB.KonferensTyp conferenceType;
        private DB.KonferensPri conferencePrice;
        public LogicConference()
        {
        }


        private LogicConference(DB.KonferensTyp ConferenceObject)
        {
            this.conferenceType = ConferenceObject;
        }

        private LogicSession session;

        public LogicConference(LogicSession session)
        {
            this.session = session;
        }

        public string ConferenceSeats
        {
            get { return conferenceType.antalPlatser; }
        }
        public int ConferenceNrOffRooms
        {
            get { return (int)conferenceType.antal; }
        }

        public string KonferensTyp
        {
            get { return conferencePrice.konferensTyp; }
        }

        public int Vecka
        {
            get { return conferencePrice.veckoNr; }
        }

        public string Period
        {
            get { return conferencePrice.period; }
        }

        public int Pris
        {
            get { return (int)conferencePrice.pris; }
        }

        /// <summary>
        /// Metod som returnerar ett veckonummer utifrån det datum som den får medskickad.
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public int WeekNrFromDate(DateTime date)
        {
            CultureInfo culture = CultureInfo.CurrentCulture;
            int weekNum = culture.Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFullWeek, DayOfWeek.Sunday);

            return weekNum;
        }

        /// <summary>
        /// Metod som hämtar lediga konferensalternativ för vald vecka eller dag.
        /// </summary>
        /// <param name="startDate">startdatum</param>
        /// <param name="endDate">slutdatum</param>
        /// <param name="weekNr">vecka</param>
        /// <returns></returns>
        public List<string> GetFreeConference(DateTime startDate, DateTime endDate, int weekNr) //Returnerar lista över konferenser
        {
          
            return LogicSession.TheSession.Db.GetFreeConference(startDate, endDate, weekNr);
        }

        /// <summary>
        /// Metod som hämtar information (antal rum, antal platser m.m.) om konferensrummen för att visa i gui. 
        /// </summary>
        /// <param name="tempConf">konferenstyp</param>
        /// <returns></returns>
        public static LogicConference GetConferenceInfo(string tempConf)
        {
            return new LogicConference(LogicSession.TheSession.Db.GetConferensInfo(tempConf));
        }

        /// <summary>
        /// Metod som hämtar pris för konferensrum för den valda perioden.
        /// </summary>
        /// <param name="startDate">startdatum</param>
        /// <param name="endDate">slutdatum</param>
        /// <param name="weekNr">veckonummer</param>
        /// <returns></returns>
        public List<string> GetConferencePrice(DateTime startDate, DateTime endDate, int weekNr)
        {
            return LogicSession.TheSession.Db.GetConferencePrice(startDate, endDate, weekNr);
        }
        
        /// <summary>
        /// Metod som hämtar lediga konferensrum för den dag och tid som valts.
        /// </summary>
        /// <param name="timeFrom">från tid</param>
        /// <param name="timeTo">till tid</param>
        /// <param name="dayFrom">från datum</param>
        /// <param name="dayTo">till datum</param>
        /// <returns></returns>
        

        /// <summary>
        /// Metod som hämtar ut ett specifikt id för reservation och bokning. 
        /// </summary>
        /// <param name="startDate">startdatum</param>
        /// <param name="endDate">slutdatum</param>
        /// <param name="lodgingType">typ</param>
        /// <returns></returns>
        public List<string> GetConferenceID(DateTime startDate, DateTime endDate, string lodgingType)
        {
            return LogicSession.TheSession.Db.FreeConferenceID(startDate, endDate, lodgingType);
        }

        /// <summary>
        /// Metod som hämtar pris för en specifik vecka 
        /// </summary>
        /// <param name="tempId">konferens id</param>
        /// <param name="tempWeek">vecka</param>
        /// <returns></returns>
        public IQueryable GetConferencePrices(string tempId, int tempWeek)
        {
            return LogicSession.TheSession.Db.GetConferencePrice(tempId, tempWeek);
        }

        /// <summary>
        /// Metod som ändrar en specifik konferenstyps pris för en specifik period och vecka
        /// </summary>
        /// <param name="tempId">konferenstyp</param>
        /// <param name="tempWeek">vecka</param>
        /// <param name="tempPeriod">period</param>
        /// <param name="tempPrice">pris</param>
        public static void ChangedConfPrice(string tempId, int tempWeek, string tempPeriod, int tempPrice)
        {
            LogicSession.TheSession.Db.ChangedConfPrice(tempId, tempWeek, tempPeriod, tempPrice);
        }
    }
}
